{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "view-in-github"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/hsgw/keyboard-made-by-python/blob/main/notebook/jp/what_is_colaboratory.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "> これは[キーボード #1 Advent Calendar 2022](https://adventar.org/calendars/7529)の20日目の記事の一部です。   \n",
        "> トップページは[Pythonだけでキーボードを作る](https://5z6p.com/2022/12/21/ac2022/)です。"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "iBVgqeBuA9d9"
      },
      "source": [
        "# Google Colaboratory とは？\n",
        "\n",
        "Google Colaboratory は Google が提供する Python の実行環境です。\n",
        "\n",
        "自分のコンピュータに環境を用意せずに、Python を動かしたりマークダウンによるドキュメントの記述が出来ます。\n",
        "\n",
        "Google Colaboratory では、ファイル全体のことを`ノートブック`、コードやドキュメントの一塊のことを`セル`と呼び、`セル`の種類がコードなら`▷`アイコンをクリックすると実行されます。\n",
        "\n",
        "実行すると結果がセルの下に表示されます。\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "I952Ee82A9eA"
      },
      "outputs": [],
      "source": [
        "1 + 2\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kFJTKn2vA9eB"
      },
      "source": [
        "Python インタプリタのように終了するまで状態を保持するため、セル間で import したライブラリや変数を引き継いでいます。そのため、実行順序に縛りがあるかもしれません。大抵の場合は上から順番に実行していきます。\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "zQ-WBWT1A9eC"
      },
      "outputs": [],
      "source": [
        "num = 10\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "1tpeXhRsA9eC"
      },
      "outputs": [],
      "source": [
        "# printしても変数を直接書いても表示される\n",
        "print(num)\n",
        "num\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KBtF5rEoA9eC"
      },
      "source": [
        "Python が動いている仮想環境の bash にアクセスすることも出来ます。  \n",
        "これを使って pip 経由で用意されていてないライブラリをインストールしたり、python そのもののバージョンを変更したり、github からプロジェクトをクローンします。\n",
        "\n",
        "Colaboratory には前もってよく使われるライブラリがプリインストールされています。それも確認してみましょう。\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "prpb-nLaA9eC"
      },
      "outputs": [],
      "source": [
        "# !を文頭につけるとbashへのコマンドになります\n",
        "!python --version\n",
        "!pip list"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OtUUjHcNA9eD"
      },
      "source": [
        "# 実際に使ってみる\n",
        "\n",
        "早速、python で簡単な画像を生成して保存するスクリプトを実行してみましょう。\n",
        "\n",
        "画像処理ライブラリの pillow をインポートします。\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "I0LWySJvA9eD"
      },
      "outputs": [],
      "source": [
        "from PIL import Image, ImageDraw\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "t9SUodyRA9eE"
      },
      "outputs": [],
      "source": [
        "# 四角が書かれた画像ファイルを生成する\n",
        "size = (300, 200)\n",
        "img = Image.new(\"RGB\", size, (255, 255, 255))\n",
        "draw = ImageDraw.Draw(img)\n",
        "draw.rectangle((20, 20, 150, 150), fill=(255, 0, 0))\n",
        "\n",
        "# 変数の名前だけを入力すると画像をセルの実行結果として表示できる\n",
        "img"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "J22ChRcCA9eE"
      },
      "outputs": [],
      "source": [
        "# 丸を追加する\n",
        "draw.ellipse((50, 50, 200, 200), fill=(0, 255, 0))\n",
        "img"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "JrTzWf-2A9eE"
      },
      "outputs": [],
      "source": [
        "# 画像を保存する\n",
        "img.save(\"test.png\")\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OBHr1gy1A9eE"
      },
      "source": [
        "ファイルを保存した場合、一度ノートブックを閉じてしまうと環境がリセットされるため、消えてしまうかもしれません。あらかじめダウンロードしておきましょう。\n",
        "\n",
        "保存した一時ファイルは左側のタブにあるファイルブラウザから見えます。\n"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "include_colab_link": true,
      "provenance": []
    },
    "kernelspec": {
      "display_name": ".venv",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.8.10 (default, Jun 22 2022, 20:18:18) \n[GCC 9.4.0]"
    },
    "orig_nbformat": 4,
    "vscode": {
      "interpreter": {
        "hash": "b68c839e49670d3aa77ea8bdd6f541fdcce81585b85d6e1d97674ad5f32db92f"
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
